<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 闭包①: 将函数作为另外一个函数的返回值
        function fn1() {
            var a = 2

            function fn2() {
                a++;
                console.log(a);
            }
            return fn2;
        }
        var f = fn1()
        f()
        f()

        // 闭包②：将函数作为实参传递给另一个函数调用
        function showDelay(msg, time) {
            setTimeout(function() {
                console.log(msg);
            }, time)
        }
        showDelay('atguigu', 2000)
        console.log('-------------------------');
        // ③ 从高阶箭头函数理解函数柯里化
        let addfa - stack - 1 x = a => b => a + b
            // 以上是一个很简单的相加函数，把它转化为es5的写法如下:
        function add1() {
            return function(b) {
                return a + b
            }
        }
        var add3 = add(3) // add3 表示一个指向函数的变量 可以当成函数调用名来用
        add3(4) === 3 + 4 // true
    </script>
</body>

</html>